package reflect.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {
    /*
        可以在注解中定义参数
        语法:
        类型 参数名() [default 默认值]
        默认值是可选项, 若不指定默认值,那么在使用注解时则必须为该参数传值.

        参数的规则:
        实际使用注解时,为参数传值格式:
        @注解名(参数名1=参数值1[,参数名2=参数值3,.....])
        例如:
        @AutoRunMethod上定义了两个参数:
        public @interface AutoRunMethod {
            String name();
            int age();
        }
        实际应用该注解时,传参:
        @AutoRunMethod(name="张三",age=22)
        或
        @AutoRunMethod(age=22,name="张三")

        当只有一个参数时,例如:
        public @interface AutoRunMethod {
            String name();
        }
        实际应用该注解,传参:
        @AutoRunMethod(name="张三")

        此时有一个建议:
        如果注解仅定义一个参数时,建议参数的名字为"value".这样外界在使用该注解时传递参数可以免去指定参数名
        public @interface AutoRunMethod {
            String value();
        }
        实际应用该注解,传参:
        @AutoRunMethod("张三")




        当注解中的参数在一个异常时,value的参数在实际应用中也要指定参数名,例如:
         public @interface AutoRunMethod {
            String value();
            int age;
        }
        实际应用该注解,传参:
        @AutoRunMethod(value="张三",age=22)
        @AutoRunMethod(age=22,value="张三")
        但是value参数名不能省略(下面两种编译不通过):
        @AutoRunMethod("张三",age=22)
        @AutoRunMethod(age=22,"张三")



     */
    int value() default 1;

}
